home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 4 / ETO Development Tools 4.iso / Tools - Objects / Macintosh Programmer’s Workshop / MPW QR4 / SADE 1.3b1 / SADE New User WorkSheet < prev    next >
Text File  |  1991-04-25  |  12KB  |  290 lines

  1. #    Symbolic Application Debugging Environment    1.3 
  2. #
  3. #    Copyright Apple Computer, Inc. 1987-1990
  4. #    All rights reserved.
  5.  
  6. ###############################################################################
  7. # This worksheet contains some commands you might like to try.
  8. # It also contains a section on how to debug MPW tools.
  9.  
  10. ###############################################################################
  11. # Execute commands in the Worksheet as in MPW with the Enter key, or select
  12. # menu commands from the pull-down menus on the menu bar.
  13.  
  14. Version      # To display SADE's version information; or use About SADE in Apple menu.
  15.  
  16. Help        # Get a list of help topics; or use SADE Help menu command in Find menu.
  17.  
  18. # When you compile and link your application, specify the -sym on option to create
  19. # the file containing symbol information (.SYM) that SADE requires for debugging. 
  20.  
  21. # Note that the following commands use one of the sample applications that comes
  22. # with the SADE disk. Substitute a different sample application or one of your own
  23. #  applications if you wish.
  24.  
  25. # Identify the target application to debug and its symbol file:
  26.     Directory 'SADE:SADE 1.3 Tutorials:CExamples:C Tutorial 1'
  27. #    Sourcepath 'pathname1','pathname2'    # This command is not necessary with Sample1
  28.                                         # because its source is in one directory. Use
  29.                                         # SourcePath only if your source files are in 
  30.                                         # multiple directories or in a different 
  31.                                         # directory than your source.
  32.     Target 'Sample1'    # assumes symbol file is 'Sample1.SYM'
  33.  
  34. # You will see that Target not only identifies the application but launches it, opens
  35. # the source file, and breaks at the first statement of the main program.
  36.  
  37. # Now select a statement of interest; e.g., DoMenuCommand (use the Mark menu), and 
  38. # choose the Go Til command from the SourceCmds menu. SADE sets a temporary 
  39. # breakpoint on DoMenuCommand and resumes operation of Sample1 (the traffic light 
  40. # appears). SADE will be reentered when the breakpoint is encountered; in this case, 
  41. # choose Red Light from the Traffic menu and SADE highlights DoMenuCommand in the 
  42. # source file.
  43.  
  44. # Now choose a variable to watch, e.g., gStopped, which tells whether the light is
  45. # Red (TRUE) or green (FALSE); highlight gStopped here and select Add Watch Variable
  46. # from the Variables menu. SADE opens a window displays its current value. SADE will 
  47. # also show its new value whenever you step. 
  48.  
  49. # Now step the program using Step in the SourceCmds menu. If you want to step into a
  50. # routine use the Step Into menu command. For example, after 4 or 5 steps you can 
  51. # step into the SetLight routine when SetLight (FrontWindow(), false); is highlighted.
  52. # Within the SetLight routine, gStopped should change to 0. 
  53.  
  54. # To remove Sample1 as the target, issue this command:
  55.     Kill
  56.  
  57. ###############################################################################
  58. # When your application is running, you can suspend it and enter SADE by 
  59. # pressing <command-option> <SADEKey>.
  60. # The default SADEKey is <numeric-key-pad-period>.
  61. # To change it, modify and execute the following:
  62.  
  63. sadekey <new key code>
  64.  
  65. # See Inside Macintosh Volume 5 pages 191-192 for the key codes for the various keyboards.
  66.  
  67. ###############################################################################
  68. # Debugging Object Pascal and MacApp
  69.     MacApp methods are supported.  Within methods, references to the instance 
  70.     variables of the object can be made without qualifying those references by SELF.
  71.     These free references to instance variables can also be done in C++ member 
  72.     functions.
  73.     
  74.     A SADE variable, BreakIfNoSource, defaults to 0.  When 0, a Step Into will 
  75.     continue stepping until there is source statement information available for the 
  76.     instruction at the program counter.  The benefit of this is that SADE will not 
  77.     break in out-of-line arithmetic routines such as ULMODT and display mysterious 
  78.     lines of assembler.  A further benefit is that Object Pascal and MacApp method 
  79.     dispatches are treated as indivisible operations: stepping into a method call 
  80.     will break at the first instruction of the method, without the necessity of 
  81.     fiddling around with StepMethod procedures and what not.  The down side 
  82.     (there's always a down side) is that if SADE steps into something without 
  83.     statement information, it will appear SADE has hung.  It hasn't, it's just very 
  84.     busy executing your code 2 to 3 orders of magnitude slower than normal.  This 
  85.     down side should only affect you if you compile some of your code with symbols 
  86.     and some without and then inadvertently step into it.  Should you do so, you have
  87.     a choice of waiting for completion of stepping or rebooting.  Setting 
  88.     BreakIfNoSource to 1 will make SADE break when no source information is available
  89.     for the PC.
  90.     
  91.     To step into a method use the StepInto menu item from the SourceCmds menu 
  92.     (Source vs Asm checked in SourceCmds) or the Step Line Into command and options.
  93.     To avoid stepping through MacApp's method dispatch code, you should assemble
  94.     MacApp's ≈.a files with "-SYM OFF".  Otherwise, the BreakIfNoSource switch does
  95.     not accomplish very much.
  96.     
  97.     Follow these four simple steps when debugging MacApp code with SADE.  Assume the
  98.     target is the MacApp sample program DemoDialogs:
  99.     
  100.     (1)    In MPW, set the directory to the location of your sourcefiles and build your 
  101.     application with symbol information:
  102.             directory "hd:MacApp® 2.0.1:Examples:DemoDialogs:"
  103.             mabuild -sym -autobuild DemoDialogs
  104.     The -autobuild option will build the MacApp libraries if necessary.
  105.     
  106.     (2)    Launch SADE and set the directory to the location of the SYM file (in this 
  107.     case, DemoDialogs.SYM).  Inside the source folder, there should be a newly
  108.     created folder named .NoDebug Sym.  This is where the SYM file will be located.
  109.     (If you used any other mabuild option, the folder will be named differently).
  110.     Execute the following command:
  111.         directory "hd:MacApp® 2.0.1:Examples:DemoDialogs:.NoDebug Sym:"
  112.     
  113.     (3)    Next, you need to set the sourcepath to where your sourcefiles and the MacApp
  114.     libraries are located.  You will need to execute the following command:
  115.         Sourcepath    "hd:MacApp® 2.0.1:Examples:DemoDialogs:", ∂
  116.                     "hd:MacApp® 2.0.1:Libraries:"
  117.                     
  118.     (4)    Finally, you need to target your program.  You may do this either by using 
  119.     the Target menu item or by entering the Target command in the SADE worksheet:
  120.         Target 'DemoDialogs'
  121.         
  122.     The file MDemoDialogs.cp should now be open and the program counter should be at
  123.     the first statement: void main ()
  124.         
  125.  
  126. ###############################################################################
  127. # Low-level Debugging (Set SourceCmds menu to Asm Debugging)
  128. # If you use Step menu command now, SADE executes one instruction at a time rather 
  129. # than one source statement at a time.
  130. # Here are some commands you can use for low-level debugging:
  131.     Stack                        # Show the address of, owner, and caller of all 
  132.                                 # stack frames
  133.  
  134.     Disasm pc 10                # Disassemble 10 instructions starting from the pc
  135.     
  136.     Disasm myProc.(1)             # Disassemble 20 (the default) instructions starting
  137.                                 # from the first statement of procedure myProc
  138.  
  139.     Dump a0 64                    # Display 64 bytes beginning at location pointed to
  140.                                 # by register a0
  141.     
  142.  
  143. # Macintosh System Structures
  144.  
  145.     go til main.(9)                # or some other statement
  146.     
  147.     heap                        # Display the heap pointed at by theZone
  148.     heap check                    # Validate the heap pointed at by theZone
  149.     resource                       # displays all open resource maps in target application
  150.  
  151.     windowList^                    # Display FrontWindow as a grafPort
  152.     ^WindowRecord(windowList)^    # Display FrontWindow as a windowRecord
  153.     *(WindowRecord *)(windowList)    # doing the same with a C expression
  154.  
  155. ###############################################################################
  156. # Source Level Debugging (Set SourceCmds to Source Debugging)
  157. # If you use Step menu command, SADE steps one source statement at a time. Here is
  158. # a procedure for stepping a given number of times; note the use of the onEntry 
  159. # keyword, which tells SADE what to do after each step; in this case, take another 
  160. # step.
  161. define SADELooper
  162. SADELooper := 10
  163. Proc StepTen
  164.     If SADELooper > 0
  165.         SADELooper := SADELooper - 1
  166.         where (Δpc)
  167.         Step onentry StepTen
  168.     Else
  169.         Stop
  170.     End
  171. End
  172. StepTen
  173.  
  174. # To run StepTen again, remember to reset the SADELooper variable to the number 
  175. #    of steps you want.  After you're finished, you may wish to undefine SADELooper.
  176.  
  177. ###############################################################################
  178. # To remove the target application, use the following:
  179.     kill
  180.     
  181. ###############################################################################
  182. # To debug an MPW tool (using the example tool Count):
  183. # (1)    Compile and link the tool with symbolic information (-sym on|full)
  184. #        Be sure to specify the file type and creator when you Link an MPW tool:
  185.             Link -t 'MPST' -c 'MPS ' -sym on
  186.             
  187. # (2)    Launch SADE and set the directory to the location of the tool's source
  188. #        file(s)
  189.             Directory "hd:mpw:Examples:CExamples:"
  190.             
  191. # (3)    Target the MPW Shell using the tool's symbol file.
  192.             Target "hd:mpw:mpw shell" using "Count.SYM"
  193.  
  194. # (4)    Then in MPW, run your tool.
  195.  
  196. # To remove the tool as the target, kill the tool using either the Kill menu
  197. # command (which calls KillTool) or issue KillTool from the SADE worksheet. 
  198. # Do not issue the Kill command from the worksheet.  This will kill MPW.
  199. # KillTool will shutdown the tool and leave MPW running, so you can continue to 
  200. # work in MPW if you wish. 
  201.         KillTool
  202.  
  203.  
  204. ###############################################################################
  205. # The folder SadeScripts contains files with examples of the SADE language.
  206. # You might find these interesting if you are attempting to write your own scripts.
  207. # First, set the directory to the folder containing SadeScripts.
  208.  
  209. directory concat (SADEDir,'SADE Example Scripts:')    # SADEDir is defined in SADEStartup
  210.  
  211. # Then select any line beginning with 'execute' and press Enter; commands nested
  212. # under the execute line can then be run as well.
  213.  
  214. execute 'DisplayMemory'
  215.     dm windowlist^,100                    # a script that mimics the dump command
  216.  
  217.  
  218. execute 'FCBChecker'
  219.     DisplayFCBs                            # Displays information about all open files
  220.  
  221.  
  222. execute 'HeapProcs'
  223.     displayHeapInfo                        # displays various heap-related info 
  224.                                         # Execute each of these calls individually
  225.  
  226.     showfreemp                            # Displays the values of all free masterpointers 
  227.                                         # in theZone.
  228.  
  229.     heapdisplay theZone                    # mimics the heap command 
  230.     
  231.  
  232. execute 'MiscFunctions'                    # These show how to write functions with an 
  233.                                         # arbitrary number of arguments.
  234.     min (5, 10)                            # Displays the minimum of 5 and 10
  235.     max (25, 101, 67, 44)                # Displays the maximum of 25, 101, 67 and 44
  236.  
  237.  
  238. execute 'MiscProcs'
  239.     displaywindowlist                    # Displays the location and name of each open window.
  240.  
  241.  
  242. execute 'ResMap'
  243.     resmap "CODE"                        # Display information about all CODE resources.
  244.     resmap                                # SLOWLY mimics the resource command
  245.  
  246.  
  247. execute 'ResVerify'
  248.                                         # NOTE:  The following command's validation may be too strict.
  249.     ResVerify                            # mimics the resource check command
  250.  
  251.  
  252. execute 'StackCrawl'
  253.     StackCrawl                            # mimics the stack command
  254.  
  255.  
  256. execute 'InterList Proc'
  257.     InterList('routine name', 'output filename')    # interleaves statements and associated instructions
  258.  
  259.  
  260.  
  261.  
  262. ###############################################################################
  263. # for the numerically minded--how many debuggers can do factorial?
  264. # Select all of the following text and hit 'Enter'
  265.  
  266. func fact(n)
  267.     if n <= 1.0 then
  268.         return 1.0
  269.     else
  270.         return n * fact(n-1)
  271.     end
  272. end
  273.  
  274.  
  275. proc factorial (n,file)
  276.     define i
  277.     if nargs>1 then
  278.         redirect file
  279.     end
  280.     for i := 1 to n do
  281.         printf("fact(%.2d) = %19.19g\n",i,fact(i))
  282.     end
  283.     if nargs>1 then
  284.         redirect
  285.     end
  286. end
  287.  
  288.  
  289. factorial (20)
  290.